package dao;

import java.util.Vector;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import model.Contato;
import util.Comparador;
import util.Filtro;
import util.Utils;

public class ContatoDAO {

    private RecordStore rs;
    private int id;

    public ContatoDAO() {
        id = 1;
        try {
            rs = RecordStore.openRecordStore("agenda", true);
        } catch (Exception e) {
            Utils.die("Erro ao tentar abrir o recordStore",e);
        }
    }

    public void salvarContato(Contato contato) {
        try {
            byte[] byteArray = contato.toByteArray();
            rs.addRecord(byteArray, 0, byteArray.length); //Grava dados
            id++;
        } catch (Exception e) {
            Utils.die("Erro ao salvar contatos", e);
        }
    }

    public Vector listaContatos() {
        Vector contatos = new Vector();
        Comparador comp = new Comparador();
        RecordEnumeration re;
        try {
            re = rs.enumerateRecords(null, comp, false);
            while (re.hasNextElement()) {
                Contato contato = new Contato(re.nextRecord());
                contatos.addElement(contato);
            }
        } catch (Exception ex) {
            Utils.die("Erro ao listar os contatos", ex);
        }
        return contatos;
    }

    public Vector pesquisaContato(String nome) {
        Vector contatos = new Vector();
        Comparador comp = new Comparador();
        Filtro filtro = new Filtro(nome);
        RecordEnumeration re;
        try {
            re = rs.enumerateRecords(filtro, comp, false);
            while(re.hasNextElement()){
                Contato contato = new Contato(re.nextRecord());
                contatos.addElement(contato);
            }
        } catch (Exception ex) {
            Utils.die("Erro ao pesquisar contatos", ex);
        }
        return contatos;
    }
    
    public void atualizaContato(Contato contato){
        try {
            rs.setRecord(contato.getId(), contato.toByteArray(), 0, contato.toByteArray().length);
        } catch (Exception ex) {
            Utils.die("Erro ao atualizar o contato.");
        }
    }
    
    public void excluiContato(int id){
        try {
            rs.deleteRecord(id);
        } catch (Exception ex) {
            Utils.die("Erro ao excluir registro.");
        }
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}
